#ifndef _TDDL_MEASUREMENT_
#define _TDDL_MEASUREMENT_

#include "system_information.h"
#include "tss_error.h"
#include "Tss_typedef.h"
#include "indicate.h"

/**
*@brief 该函数用于初始化CPU结构体
*@param [out] pCpuInfo 获取存储CPU结构体地址的指针
*@retval TDDL_SUCCESS 函数执行成功
*@retval TDDL_NULL_POINTER 空指针错误
*/
TSS_RESULT tddl_measure_initCPUStruct(OUT PCPUINFO* pCpuInfo);

 /**
*@brief 该函数用于填充CPU信息结构体
*@param [in] cpuInfo 所需填充的结构体指针
*@retval TDDL_SUCCESS 函数执行成功
*@retval TDDL_NULL_POINTER 空指针错误
*@retval TDDL_BAD_RESULT 填充失败
*/
TSS_RESULT tddl_measure_fillCPUStruct(IN PCPUINFO cpuInfo);

/**
*@brief 该函数用于释放CPU信息结构体
*@param [in] pCpuInfo 传入CPU结构体地址的指针
*@retval TDDL_SUCCESS 函数执行成功
*@retval TDDL_NULL_POINTER 空指针错误
*@retval TDDL_BAD_RESULT 释放失败
*/
TSS_RESULT tddl_measure_freeCPUStruct(IN PCPUINFO* pCpuInfo);

/**
*@brief 该函数用于初始化软件信息结构体
*@param [out] pSoftInfo 获取存储软件信息结构体地址的指针
*@retval TDDL_SUCCESS 函数执行成功
*@retval TDDL_NULL_POINTER 空指针错误
*/
TSS_RESULT tddl_measure_initSoftStruct(OUT PSOFTINFO* pSoftInfo);

/**
*@brief 该函数用于填充软件信息结构体
*@param [in] softInfo 所需填充的结构体指针
*@retval TDDL_SUCCESS 函数执行成功
*@retval TDDL_NULL_POINTER 空指针错误
*@retval TDDL_BAD_RESULT 填充失败
*/
TSS_RESULT tddl_measure_fillSoftStruct(IN PSOFTINFO softInfo);

/**
*@brief 该函数用于释放软件信息结构体
*@param [in] pSoftInfo 传入软件信息结构体地址的指针
*@retval TDDL_SUCCESS 函数执行成功
*@retval TDDL_NULL_POINTER 空指针错误
*@retval TDDL_BAD_RESULT 释放失败
*/
TSS_RESULT tddl_measure_freeSoftStruct(IN PSOFTINFO* pSoftInfo);

 /**
*@brief 该函数用于程序的动态度量
*@param [in] length 程序文本的长度
*@param [in] pProgram 程序起始地址
*@retval TDDL_SUCCESS 函数执行成功
*@retval TDDL_NULL_POINTER 空指针错误
*@retval TDDL_BAD_RESULT 程序度量失败
*/
TSS_RESULT tddl_measure_program_verify(IN UINT32 length, IN BYTE* pProgram);

/**
*@brief 该函数用于平台的动态度量
*@param [in] cpuInfo 硬件信息结构体
*@param [in] softInfo 软件信息结构体
*@retval TDDL_SUCCESS 函数执行成功
*@retval TDDL_HARDWARE_ERROR 硬件信息度量失败
*@retval TDDL_SOFTWARE_ERROR 软件信息度量失败
*/
TSS_RESULT tddl_measure_platform_verify(IN PCPUINFO cpuInfo, IN PSOFTINFO softInfo);

#endif
